#ifndef __NJGIS_INJMODELSERVICE_H__
#define __NJGIS_INJMODELSERVICE_H__

#include "INxDataConfiguration.h"
#include "INxService.h"

namespace NJGIS
{
	namespace SERVICE 
	{
        //! type of platform
        typedef enum
        {
            PLF_UNKNOWN = 0,
            PLF_WINDOWS = 1,
            PLF_LINUX = 2,
            PLF_MACOS = 4
        } NjPlatform;

        //! type of service status
        typedef enum
        {
            STAT_OFFLINE = 0,
            STAT_ONLINE = 1
        } NjModelServiceStatus;

        //! type of limitation
        typedef enum
        {
            LMT_PRIVATE = 0,
            LMT_PUBLIC = 1
        } NjModelServiceLimitation;

        //! type of permission
        typedef enum
        {
            PMS_OPEN = 0,
            PMS_PERMISSION = 1
        } NjModelServicePermission;

        //! model service
        class INjModelService: public virtual INjService
        {
        public:
            //! get OID
            virtual const char* getServiceOID() = 0;

            //! get name
            virtual const char* getServiceName() = 0;

            //! get type
            virtual const char* getServiceType() = 0;
            
            //! get detail URL
            virtual const char* getServiceDetailURL() = 0;
            
            //! get pid
            virtual const char* getServicePid() = 0;
            
            //! get mid
            virtual const char* getServiceMid() = 0;
            
            //! get register status 
            virtual bool getServiceRegister() = 0;
            
            //! get description
            virtual const char* getServiceDescription() = 0;

            //! get version
            virtual const char* getServiceVersion() = 0;

            //! get platform
            virtual const NJGIS::SERVICE::NjPlatform getServicePlatform() = 0;

            //! get deployment time
            virtual const char* getDeploymentTime() = 0;

            //! get image url
            virtual const char* getImage() = 0;

            //! get deployor name
			virtual const char* getServiceDeployorName() = 0;

			//! get deployor email
			virtual const char* getServiceDeployorEmail() = 0;

            //! get status (Dynamic)
            virtual NJGIS::SERVICE::NjModelServiceStatus getServiceStatus() = 0;

            //! get limitaion (Dynamic)
            virtual NJGIS::SERVICE::NjModelServiceLimitation getServiceLimitation() = 0;

            //! get permission 
            virtual const NJGIS::SERVICE::NjModelServicePermission getServicePermission() = 0;

            //! invoke service
            virtual int invoke(INjDataConfiguration* config, std::string& recordid) = 0;

			//! get laster information
			virtual int refresh() = 0;
        };
    }
}

#endif